package com.kang.service;

import java.util.List;

import com.kang.pojo.InventoryLoss;
import com.kang.pojo.InventoryLossStatistics;
import com.kang.pojo.InventoryLoss_itemInformation;
import com.kang.pojo.ItemDetail;
import com.vonechina.entity.page.ItemLossPage;
import com.vonechina.entity.page.LossListPage;
import com.vonechina.entity.page.LossStatisticsListPage;

/**
 * 库存报损--服务层接口
 * @author wd
 *
 */
public interface InventoryLossService {
	/**
	 * 查询报损列表总条数
	 * @param lossListPage	库存报损list（分页封装实体类）
	 * @return	int型
	 */
	public int selectByWhereCount(LossListPage lossListPage);
	/**
	 * 查询报损列表
	 * @param lossListPage	库存报损list（分页封装实体类）
	 * @return	集合List<InventoryLoss>
	 */
	public List<InventoryLoss> selectByWhereList(LossListPage lossListPage);
	
	/**
	 * 根据报损id查询报损详情物品列表
	 * @param inventorylossid	酷讯报损ID
	 * @return	集合（报损物品集合（实体类信息））
	 */
	public List<InventoryLoss_itemInformation> listItemByInventorylossid(Integer inventorylossid);
	
	/**
	 * 根据报损id查询报损信息
	 * @param inventorylossid	库存报损ID
	 * @return	库存报损信息（实体类）
	 */
	public InventoryLoss getInventoryLossById(Integer inventorylossid);
	
	/**
	 * 根据库存报损id删除库存报损
	 * @param inventoryLossID	库存报损ID
	 * @return	true与false
	 */
	public boolean deleteInventoryLossById(int inventoryLossID);
	
	/**
	 * 添加报损物品时查询物品列表
	 * @param page	查询条件（封装的实体类）
	 * @return	物品集合
	 */
	public List<ItemDetail> listItemDetailForLoss(ItemLossPage page);
	
	/**
	 * 修改报损单信息
	 * @param inventoryLoss	报损信息（实体类）
	 * @return	int型（大于0成功否则失败）
	 */
	public int updateInventoryLoss(InventoryLoss inventoryLoss);
	
	/**
	 * 删除报损单的中不属于当前集合的物品id的物品
	 * @param inventorylossid	报损ID
	 * @param itemIds	批次ID集合
	 * @return	int型（大于0成功否则失败）
	 */
	public int deleteItemNotInLossSingle(Integer inventorylossid,Integer[] itemIds);
	
	/**
	 * 保存报损单中的物品
	 * @param inventorylossid	报损ID
	 * @param itemIds	批次ID数组
	 * @param number	物品报损数量
	 * @param itemInformationIDs	物品ID数组
	 * @param lossReasonS	物品报损说明数组
	 * @param warehouseid	仓库ID
	 * @return	int型（大于0成功否则失败）
	 */
	public int saveLossItemList(Integer inventorylossid, Integer[] itemIds,
			Integer[] number, Integer[] itemInformationIDs, String[] lossReasonS, Integer warehouseid);
	
	/**
	 * 提交报损单
	 * @param userID	提交人ID
	 * @param inventorylossid	报损ID
	 * @return	int型（大于0成功否则失败）
	 */
	public int saveAndSubmitInventoryLoss(Integer userID,Integer inventorylossid);
	
	/**
	 * 新增报损前，生成报损单号
	 * @return 报损单号
	 */
	public String selectMaxLossNumber();
	
	/**
	 * 新增报损单信息
	 * @param inventoryLoss	报损单信息（实体来）
	 * @return	int型（大于0成功否则失败）
	 */
	public int addNewInventoryLoss(InventoryLoss inventoryLoss);
	
	/**
	 * 根据报损单号查询报损id
	 * @param lossnumber	报损单号
	 * @return	int型报损ID
	 */
	public Integer getLossIdByLossNumber(String lossnumber);
	
	/**
	 * 报损提交后修改实际库存数量
	 * @param itemIds	批次ID数组集合
	 * @param number	批次物品数量数组集合
	 * @return	int型（大于0成功否则失败）
	 */
	public int submitUpdateLossAfterNumberForStock(Integer[] itemIds,Integer[] number);
	
	/**
	 * 库存报损统计
	 * @param lossStatisticsListPage	报表查询条件（封装的分页实体类）
	 * @return	报损集合（实体类）
	 */
	public List<InventoryLossStatistics> selectInventoryLossStatisticsList(LossStatisticsListPage lossStatisticsListPage);

}
